package Country;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeMap;

class Country{
    String name;//国家名称
    int GDP2020;//2020年国内生产总值
    int COVID19;//新冠肺炎累计确诊人数

    //定义一个用于初始化国家信息的构造方法
    public Country(String name,int g,int c){
        this.name = name;
        this.GDP2020 = g;
        this.COVID19 = c;
    }

    //重写toString方法，用于输出Country类的成员信息
    public String toString(){
        return "["+name+"  GDP:"+GDP2020+"  新冠累计确诊数:"+COVID19+"]";
    }
}

//定义一个countryComparator类作为比较器，实现Comparator接口
class countryComparator implements Comparator{
    public int compare(Object o1, Object o2){
        if(((Country)o1).COVID19==((Country)o2).COVID19){
            return 1;
        }else{
            return (int)(((Country)o1).COVID19-((Country)o2).COVID19);
        }
    }
}

public class TestComparator {
    public static void main(String[] args) {
        //定义一个countries数组，用于存放10个实例化的Country对象
        Country[] countries = new Country[10];
        //将10个国家的信息放到countries数组中
        countries[0] = new Country("美国",20932750,44918565);
        countries[1] = new Country("中华人民共和国",14722837,124924);
        countries[2] = new Country("日本",5048688,1706675);
        countries[3] = new Country("德国",3803014,4284354);
        countries[4] = new Country("英国",2710970,8006660);
        countries[5] = new Country("印度",2708770,33893002);
        countries[6] = new Country("法国",2598907,7038701);
        countries[7] = new Country("意大利",1884935,4689341);
        countries[8] = new Country("加拿大",1643408,1647142);
        countries[9] = new Country("韩国",1630871,323379);

        //创建一个TreeMap的对象map,创建一个比较器countryComparator的对象并作为参数传给TreeMap构造方法。
        TreeMap<Country,String> map = new TreeMap<Country,String>(new countryComparator());

        //循环调用put()方法将Country/String数据对存放到map中
        for (int i = 0; i < countries.length; i++) {
            map.put(countries[i],countries[i].name);
        }

        //调用keySet()方法将map中的键-country放到集合collection中。
        Collection<Country> collection = map.keySet();

        //利用迭代器遍历集合中的元素，并依次将元素输出
        Iterator<Country> iterator = collection.iterator();//创建一个迭代器iterator

        System.out.println("按照新冠累计确诊人数从小到大输出以下10个国家信息：");
        while(iterator.hasNext()){//调用hasNext()方法检查迭代器中是否还有元素
            Country c = iterator.next();//调用next()方法将迭代器中的下一元素放到一个Country对象c中
            System.out.println(c);//输出c
        }
    }
}
